
// const的存在大致与let一致，不同的是const定义的是常量不能改变
// 不可重复声明和赋值
const PI = 3.1415;
console.log(PI); // 3.1415
//PI = 3; 报错
// const PI = 3.1; 报错

// 块级作用域
if (true) {
  const MAX = 5;
}
// console.log(MAX); ReferenceError

// 没有变量提升
if (true) {
  console.log(MAX); // ReferenceError
  const MAX = 5;
}

// 常量只是指向的地址不可变但实际上对象的内容是可以变的，所以在指向对象时要格外注意，数组也是如此
const foo = {};
foo.prop = 123;

foo.prop
// 123

//foo = {} // 报错

// 如果真的要将对象冻结，使用Object.freeze方法
const foo1 = Object.freeze({});
//foo1.prop = 123; // 不起作用
console.log(foo1);

// 跨模块常量:另见testmodule.js
export const a = 1;
export const b = 2;
export const c = 3;

// ES6规定，var命令和function命令声明的全局变量，属于全局对象的属性；
// let命令、const命令、class命令声明的全局变量，不属于全局对象的属性。